package transitarios.api;

import java.io.Serializable;

import transitarios.GestaoCargas;
import transitarios.GestaoCatalogo;
import transitarios.GestaoParametrizacoes;
import transitarios.entidades.cargas.Carga;
import transitarios.entidades.veiculos.Veiculo;
import transitarios.exceptions.VeiculoAssociadoEncomendaException;
import transitarios.exceptions.VeiculoIncompativelComEncomenda;
import transitarios.exceptions.VeiculoNaoEstaLivreException;
import transitarios.uteis.PercentagemMinimaCarregamento;

public interface ITransitario extends Serializable, Cloneable {

	public abstract GestaoCatalogo getCatalogo();

	public abstract GestaoCargas getGestaoCarga();

	public IGestaoClientes getGestaoClientes();

	public IGestaoCondutores getGestaoCondutores();

	public IGestaoEncomendas getGestaoEncomendas();

	public abstract GestaoParametrizacoes getGestaoParametrizacoes();

	public IGestaoUtilizacaoFrota getGestaoUtilizacaoFrota();

	public IGestaoVeiculos getGestaoVeiculos();

	public abstract PercentagemMinimaCarregamento getPercMinimaCarga();

	public void inserirEncomendaNoVeiculo(String codEncomenda, String mat)
			throws VeiculoNaoEstaLivreException,
			VeiculoIncompativelComEncomenda;

	public abstract void libertarVeiculo(Veiculo veiculo);

	public Veiculo procurarVeiculoCompativelComCarga(Carga carga);

	public void removeVeiculo(String matricula)
			throws VeiculoAssociadoEncomendaException;

	public void setGestaoClientes(IGestaoClientes gestaoClientes);

	public void setGestaoCondutores(IGestaoCondutores gestaoCondutores);

	public void setGestaoEncomendas(IGestaoEncomendas gestaoEncomendas);

	public abstract void setGestaoParametrizacoes(
			GestaoParametrizacoes gestaoParametrizacoes);

	public void setGestaoUtilizacaoFrota(IGestaoUtilizacaoFrota frota);

	public void setGestaoVeiculos(IGestaoVeiculos gestaoVeiculos);

}